vim: linebreak

16-12-17 00:12

dalis straipsniu neturi turinio.
  - ~60 / 2500.
  - nors kai kurie is ju turi turini, taciau jis kitaip suformatuotas, ir nera aptinkamas.
    - pvz.: http://www.delfi.lt/m360/naujausi-straipsniai/lrt-neteisetai-reklamavo-kava.d?id=73102196
    - kadangi ju mazai, tiesiog atmesiu.
    - nors sis straipsnis suformatuotas kaip tikeciausi:
      - http://www.delfi.lt/news/daily/world/europos-komisija-nurode-kada-turi-baigtis-brexit-derybos.d?id=73085026
        - sitas straipsnis yra pavyzdzys straipsnio, kurio pabreztas pirmas paragrafas vertingas.
      - ar mano crawleris nepatikimas?
        - pasirodo body > p tagai yra filtruojami pagal tai ar turi vaiku. <a href> tagai skaitosi kaip vaikai, taigi jie atmetami.
          - svarbu sutvarkyti nes tekstas su tagais geras.
            - Done
          - html.text_content() pavercia ir <a> elementus i teksta.
          - nebefiltruojant pagal vaiku buvima, ar tiesiog article-body > p pakankamai konkretu?
            - siuo metu turbut. TODO

atradau kad kai kurie straipsniai turi SOURCE bruoza.
  - div.delfi-source-name/text()

dalis (kolkas 1/1000) neturi datos.

16-12-18 19:46

straipsniu paragrafu skaicius rodo kad yra keistai ilgu straipsniu.
  - pipe( articles, filter(compose(, len, get_in(['body']))), frequencies )
  - kartais <p> tagai yra naudojami sarasam.
    - ar informacija sarasuose naudinga?
      - jeigu ne, juos galima prafiltruoti ziurint ar paragrafas ilgesnis nei keli zodziai.
      - bendrai kalbant sarasas nera naturali kalba, tai manes nedomina.
  - (done) isfiltruoti per daug trumpus paragrafus.

video kategorijos straipsniai turbut nedomina irgi, su jais teksto nelabai buna.
  - juose nerandamas, nes jo nera, izanginis paragrafas.
  - (done) reiktu isfiltruoti. tai galima padaryti pasivertus html i article.

kai izanginis paragrafas (first_para) nerandamas, body vektoriaus pirmas elementas tampa None. tai lauzo funkcijas naudojancias body.
  - (done) padaryti kad jeigu first_para nerastas, tai nepaliktu None elemento `body` vektoriuje.

(done) autorius neaptinkamas kai kuriais atvejais.
  - pvz.: http://www.delfi.lt/veidai/muzika/paaiskejo-pretendentai-i-mama-statuleles-tokio-nominantu-saraso-niekas-nesitikejo.d?id=73166726

(done) turinys neaptinkamas kai kuriais atvejais.
  - pvz.: 'multimedija' kategorijoje naudojamas kitoks formatavimas.
    - pipe( articles, filter(compose(partial(operator.eq, 'multimedija'), first, get_in(['category_chain']))), list )
    - http://www.delfi.lt/multimedija/zvilgsnis-i-lietuva/lietuviu-troja-kadaise-negailestingai-sudeginta-unikalaus-grozio-vieta.d?id=73112266

16-12-20 00:31

sutvarkytos auksciau isvardintos problemos. delfi interpretavimas veikia gerai. galima siusti straipsnius.

16-12-21 20:05

skirstymas i sakinius.
  nltk.tokenize.sent_tokenize 

matuoti variable variance, tai yra kiek kintamieji kinta.
  - koks pitono paketas tai gali padaryti?
    - panasu kad tai galima padaryti su paprastais irankiais.
  - kaip palyginti variance?
    - google TODO

toliau reiktu apgalvoti ju suspaudima, pvz kad butu nuo 0-1 ar -1..1

16-12-22 11:53

scikit-learn paketas turi
  - preprocessing.{scale,robust_scale} normalizuoja bruoza.
    - scikit-learn dokumentacija turi naudinga sekcija apie tai.
outliers, tai yra eilutes su labai isskirtiniais skaiciais, iskreipia pasiskirstyma.
  - google how to remove outliers panda
  - kaip juos aptikti?
    - vienas is pasiulytu metodu:
    - abs(x - mean(x)) / std(x) < 3
      - kas yra standard deviation?
  - kaip juos pasalinti?
    - siulo kaip matlabe uzdeti kauke.
  - kaip juos nukenksminti, galutinai nepanaikinant?
    - butu blogai ismesti isskirtinius straipsnius.
    - ar modelis gali ismokti susidoroti su isskirtiniais straipsniais, jeigu su jais nera treniruojamas?
      - geriausias budas patikrinti butu pabandyti.

Variacijai matuoti: std(X) / mean(X). std paskaiciuoja vidutini nutolima nuo vidurkio, o padalinimas is vidurkio sulygina kintamuju dydzius.

outly_factor = lambda X: np.abs(X - X.mean()) / X.std()

pipe( body_features,
  lambda X: X[outly_factor(X) < 3],
  lambda X: X.std() / X.mean(),
  lambda X: X.sort_values() )

Variacija be ekstremaliuju meginiu

chars_in_sent    0.265589
chars_in_para    0.314546
sents_in_para    0.394795
para_count       0.677529
char_count       0.818519
sent_count       0.839089

Su ekstremaliaisiais

chars_in_sent    0.283714
chars_in_para    0.367252
sents_in_para    0.457111
para_count       0.836689
char_count       1.001266
sent_count       1.019760

16-12-27 22:58

kokie skirtumai tarp straipsniu kategoriju? pvz verslo, pramogu etc.
  - reikia galeti atskirti is kokios kategorijos straipsnis yra.
    - pipe( article, get_in(['category_chain']), first )
    - X.category_chain.apply(first)
  - ir tada prieinant prie straipsniu zinoti kokioje jis kategorijoje.
    - for cat in categories
      - for art in articles if category(cart) == cat
    - X2 = pd.concat([X.category_chain.apply(first).to_frame('main_category'), X], axis=1)
      - for name, group in X2.groupby('main_category'):

16-12-29 16:54

ziureti i drafts.py

kaip geriau sekti uzduotis, ieskojima ir rezultatus?
  - kaip daugiau uzrasyti?

16-12-30 13:24

n-gram'ai kaip rasysenos bruozai.
  - ngramas -- zodis/skiemuo su supanciais gramais.
  - paprastai POS (part-of-speech) ngramai naudojami, kai norima apibudinti rasysena.
  - Huang et al (2012) - Improving word representations via global context and multiple word prototypes.

kaip atsikratyti topiniu bruozu, kurie apibudina apie ka kalbama, o ne kalbesena?
  - vikipedijos klasifikavime buvo naudojami straipsniai is vienos temos (pvz biologija). tai isryskino teminius zodzius kaip nebruozinius.

IQ -- Information Quality -- zodis daznai naudotas straipsniuose apie vikipedijos turini.

pipe(
  daugiausiai naudojami zodziai
  [ sugrupuoji atmetant morfologinius skirtumus ]
    - ar tai galima padaryti be mokytojo?
    - Morpheme n. definition: meaningful morpholical unit of a language that cannot be further divided.
  sugrupuoji pagal korelacija
    - pagal pakankamai panasu naudojima
  isrusiuoji pagal variacija
    - std / mean
  paemi turincius didziausia variacija
  )

Morfemu (morpheme) segmentacija.
  - Creutz, Lagus et al (2007) - Unsupervised models for morpheme segmentation and morphology learning.
    - Ziureti panasius straipsnius, arba kurie cituoja sita. Yra naujesniu.
    - Morfessor 2.0 ir Morfessor FlatCat implementuoti pythone.
      - yra git repos.

Kaip sumaitinti teksta i neuronini tinkla?
  - recursive nn?
  - Luong et al (2013) - Better Word Representations with Recursive Neural Networks for Morphology.

17-01-04 15:45

MP Porto (2007) - Frame Diversity and Citizen Competence: Towards a Critical Approach to News Quality.
  - "According to this model, the availability of diverse interpretive frames in the public realm, particularly in the news media, is an important precondition for enhancing citizen competence."

R. Benson (2009) - What makes news more multiperspectival? A field analysis.
  - Apzvelgia multi-perspektyvizma.
  - Lygina JAV ir Prancuzijos atvejus.

30x30 SOM'as isskiria daug grupiu.
  - kaip jas isnagrineti?

17-01-07 15:39

isdeliojau straipsnius SOM'e ir perpaisineju plot'a isskirdamas straipsnius pagal kategorija.
  - neakivaizdu kad kategorijos butu labai aiskiai sugrupuotos.
  - ar galima butu padaryti palyginimus tarp kategoriju poru (atsizvelgiant i ju koordinates) kad nustatyti ju santykius?
    - plot.ly interaktyvus tasku i/isjungimas pagal kategorija butent tai padaro.
    - turint ~15 kategoriju supiesti visas poras butu nepraktiska, bet galbut galima butu palyginti issidestymus algoritmiskai. pvz: kokia dalis A tasku yra d atstumu nuo kokio nors B tasko.

patogesnis setup'as. articles uzkrovimas ir t.t.
  - butu gerai kazkas lazy ar panasaus.

ziureti i SOM'a kaip i graph'a.
  - ka tai duotu?
    - SOM'a galiu vartyti kaip patinka, bet node'u tvarkos negaliu keisti.

ziurint i straipsniu issidestyma ir ju pavadinimus, galima manyti kad tam tikri bruozai yra isskiriami.
  - perziureti ju issidestyma kartu su pirminiais bruozais kurie buvo naudojami treniruojant SOM'a.

17-01-22 20:05

Strickert, Hammer, Jan 2004 - Unsupervised Recursive Sequence Processing.
  - apraso SOM'o variacija -- SOM-S -- kuri klasterizuoja sequences.

Strickert, Hammer, Oct 2004 - Merge SOM for temporal data.
  - apraso SOM'o variacija -- Merge SOM -- kuri taip pat klasterizuoja eiles duomenu.

MSOM ir SOM-S yra tu paciu autoriu. MSOM publikuotas maziau nei metais veliau.
  - SOM-S naudoja nestandartini septyniu kaimynu grid'a, kad isgauti galingesnes topologijas.
    - tai prideda sudetingumo implementacijai.
  - MSOM'as uzsimina apie SOM-S, kaip savo protevi.
  - kaip sie du metodai skiriasi, jei neatsizvelgiant i grid'u skirtuma?
  - kodel MSOM nenaudoja hyperbolinio grid'o?
    - MSOM yra nepriklausomas nuo lattice (grid'o) tipo. jis gali naudoti 7-neighbour grid'a taip pat.

17-02-08 18:22

MSOM mazdaug aiskus.

Kaip matuoti MSOM'o "entropy"? Tai reikalinga koreguojant konteksto itaka mokymosi procesui -- "didinti konteksto itaka, kai entropy mazeja, ir atvirksciai".
  - Entropy yra apibreziama kaip sistemos chaotiskumas, informacijos apie ja trukumas.
  - Tai galetu buti kokio nors rodiklio (pvz kvantizacijos) sokinejimas, kitaip sakant nenuspejamumas.

Kaip atvaizduoti MSOM'o egzotiskesnius issidestymus?
  - bruteforce'inti ieskant issidestymo su vienodais atstumais tarp kaimynu?

17-02-27 18:00

Kaip padaryti MSOM implementacija su Tensorflow?
  - Suprasti MSOM.
    - Redukuoti MSOM i graph'a.
  - Rasti pirma zingsni.
    - Skaityti pavyzdzius
      - Tikiuosi rasti TF programos griaucius kuriuos galeciau pritaikyti.
      - google tensorflow examples
        - https://www.tensorflow.org/get_started/mnist/mechanics
          - https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist.py
          - https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/fully_connected_feed.py

17-03-02 21:14

grapho iejimai yra
  - sakiniai
    - sakinys yra zodziu ilgiu sarasas [2 5 1 4 3]

neuronas susideda is
  - w ir
  - c

grapho ciklas:
  - argumentai yra
    - dabartine x (saraso) iteracija - x.t
    - paskutinis (t-1) laimejes neuronas
    - einamas kontekstas - c.t
    - dabartine neuronu bukle - N
  - eigoje perskaiciuojam
    - einama konteksta pagal paskutini laimejusi neurona
      c.1 = 0
      c.t = w.t' - c.t'
        - (t' reiskia paskutinio zingsnio laimetojai,
            straipsnis ivardina taip: t.I.t-1)
    - kiekvieno neurono nuotoli (jautruma)
      d = x.t - w.i + c.t - c.i
    - sujautrinam jau ir taip jautrius neuronus
      delta w = d * x - w
      delta c = d * c.t - c.i

17-03-17 16:30

apie tai kaip maitinti pavyzdzius modeliui
  - https://www.tensorflow.org/api_guides/python/io_ops

tf.Variable
  - https://www.tensorflow.org/api_docs/python/tf/Variable

state_ops (irgi apie Variables)
  - https://www.tensorflow.org/api_guides/python/state_ops
    - kalba apie Sparse Variable Updates
      - "sparse update ops modify a subset of the entries in a dense Variable"
      - palygink
        - tf.assign_add(ref, updates)
        - tf.scatter_add(ref, indices, updates)

tf.while_loop
  - https://www.tensorflow.org/api_docs/python/tf/while_loop
  - elgiasi kaip loop clojure kalboje.
  - pagal nutylejima leidzia 10 iteraciju paraleleje.
    - ar galiu sukurti teisinga paraleline implementacija?
      - pagal turima algoritma, pavyzdys turi buti apdorojamas is eiles, nes kiekvienas pavyzdzio apdorojimo zingsnis priklauso nuo paskutinio.
      - taciau nematau kodel daug pavyzdziu negali buti treniruojami vienu metu.
        - kaip dalintis zemelapiu tarp keliu paraleliniu mokymo operaciju?

rekursija su Fold
  - https://github.com/tensorflow/fold/blob/master/tensorflow_fold/g3doc/blocks.md#recursion-and-forward-declarations

td.Function
  - "TensorFlow function that is passed into a Function block must be a _batch version_ of the operation you want"
    - kas yra batch version?
    - ar tai trugdo paversti viena mokymo pozingsni i td.block'a?

kaip paversti tf operacija i td block'a?
  - tf ir td moduliai (operacijos ir blockai) priema iejimus ir isleidzia isejimus skirtingai.

ar td block'ai duoda svaresne abstrakcija?

kaip funkcija, kaip atrodo msom'as, jo treniravimas?

17-03-23 22:50

dideli klausimai.
  - kaip bus vykdomas mokymo reguliavimas?

patarimai ir izvalgos apie programavima
  - https://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar#Lessons_for_creating_good_open_source_software
  - trecias punktas: Planuok pirma programos versija ismesti, ji bus ismesta vienaip ar kitaip.

18-04-17

msom implementacijos niuansai:

kokie turietu buti pradiniai neuronai (pries treniravima)
  - MSOM straipsnio isvadose minima kad ju vertes turetu buti atsitiktines ir, del patogumo, centruotos aplink nuli.
    - radau uzuominu kad atsitiktiniai pradiniai neuronu svoriai universaliausas metodas.
      - jis taip pat paprastesnis pirmai implementacijai

treniruojant konteksto itaka turetu buti reguliuojama pagal "entropy"
  - straipsnis kalba apie entropy maksimizavima
  - kas yra entropy siuo atveju?
    - siuo metu pati zodi issiverciu kaip chaotiskuma
    - straipsnyje pateiktas pavyzdzys neuronu aktyvuvavimosi dazniu pries ir po treniravimosi.
      - tai duoda minti kad sis "chaotiskumas" galetu buti matuojamas pagal tai kokia dalis neuronu aktivuojami

18-04-18

ar galiu rasti msom'o implementaciju?
  - neradau
    - ieskojau "msom merge som implementation"

samplinimo pasirinkimai
  - kokios samplinimo technikos?
    - resampling atrodo susijusi tema
      - https://en.wikipedia.org/wiki/Resampling_(statistics)

kokius duomenis naudoti isbandant?
  - tekstinis datasetas butu patogiausia
  - galima paieskoti paruostu dataset'u

kaip interpretuoti jo veikima?

elastic map - SOM'o ikvepta technika nelinijinei dimensiju redukcijai
  - https://en.wikipedia.org/wiki/Elastic_map
  - daugiau info pagrindiniuose uzrasuose

Kohoneno 2013 straipsnis apie SOM'a duoda daug naudingos informacijos
  - nuoroda
    - http://aisii.azc.uam.mx/mcbc/Cursos/IntCompt/Lectura%208.%20SOM.pdf
  - pradiniai neuronai gali buti paimti is pavyzdziu
  - yra du pagrindiniai budai treniruoti soma
    - po viena pavyzdi
      - chronologiskai ankstesnis metodas, bet letesnis, komplikuotesnis ir maziau patikimas
      - MSOM'o treniravimas apibudintas siuo budu
    - visais pavyzdziais (arba daug?) vienu kartu (batch updating)
      - efektyvesnis
      - treniravimas paprastesnis, nes nereikia mazinti tinklo elastiskumo

kaip MSOM'o straipsnyje apibudinta treniravimo metoda paversti i batch'ini updeitinima ("antraji SOM'o algoritma").
  - mintis
    - rinkti deltas, po kiekvieno zingsnelio neupdeitinant tinklo, ir tada isvedus is deltu vidurki updeitinti tinkla vienu kartu
      - turi panasumu su Kohoneno batch metodu

ar neural gas (NG) implementacija butu paprastesne ir ne maziau naudinga negu SOM'o?
  - kaip MSOM'o konteksto treniravima sujungti su NG?
  - skirtumai
    - NG modeliu nestatiskumas
      - duoda tinklui lankstumo prisitaikant prie pavyzdziu
      - galbut truputi sudetingiau pavaizduoti
        - u-matrix?
        - ziureti i sekanti
  - Fritzke, 2005 - A Growing Neural Gas Network Learns Topologies 
    - puikiai parasytas straipsnis apie savaime didejanti NG tinkla
      - http://papers.nips.cc/paper/893-a-growing-neural-gas-network-learns-topologies.pdf
    - Gamma SOM, Gamma NG, Gamma GNG
      - MSOM'o pasiekejai, atrodo komplikuociau, bet sako esantys efektyvesni
    - Prudent, Ennaji, 2005 - An Incremental Growing Neural Gas Learns Topologies
      - efektyvesnis GNG tinklas
      - truputi komplikuotesnis taip pat
      - https://www.researchgate.net/profile/Abdel_Ennaji/publication/4202425_An_incremental_growing_neural_gas_learns_topologies/links/55913a7308ae1e1f9baec499.pdf
  - Cottrell, Hammer, 2008/06 - Batch and median neural gas
    - batch metodas NG tinklo treniravimui
    - https://arxiv.org/pdf/math/0610561.pdf

graph'ai, kitaip sakant tiek som'ai tiek ng tinklai, gali buti nesudetingai vizualizuojami naudojant graph visualization irankius kuriu internete apstu.
  - google graph visualization

kadangi galvoju sukurti tinkla is keliu sujungtu techniku, reikia gebeti ivertinti jo veikima
  - kaip isbandyti tinklo efektyvuma?
    - msom'o straipsnyje yra keli isbandymai

18-04-27

kad naudoti google books 1-gram duombaze reikia
  - gebeti ja perskaityti. ta numpy,pandas,scipy derinys turetu gebeti padaryti
  - gebet sujungti keliu zodziu daznius i viena
    - konkreciau
      - sujungti zodzius i lemmas
      - sujungti skirtingus zodziu kapitalizavimus
    - tai galima atlikti sudarinejant semplus

18-04-30

kodel atsiranda nauji stulpeliai be pavadinimo?
  - tai dask'o indeksas. net jei pats jo nesukuri bevardis indeksas yra sukuriamas

informacija isgauti
  - sujungti eiles su vienodais ngramais
  - atmesti zodzius kurie rasti maziau nei 15 metu
  - populiariausi zodziai
    - paskaiciuoti dazni per kiekvienus metus
    - isvesti vidurki per visus metus kiekvienam zodziui
  - zodziu kiekis per metus
    - isfiltravus mazai naudotus zodzius
    - arba is total_count failo

kokia dali zodziu naudoti?
  - viename is failu yra 80261 zodziai. jis uzema 136mb. visi failai uzema 6.58gb.
    - >>> ((800261 * 0.005) / 136) * 6.58 * 1000
     193592 zodziai
      - naudojant puse procento (0.005) zodziu turetu gautis apie 20 tukstanciu zodziu. manau to turetu uztekti modeliui

18-05-02

turbut nereikia idomiu zodziu kaip "terrorism" ar "twitter" modelio treniravimui.
  - uztenka paimti dazniausiai naudojamus.
  - naudojant modeli galima bus naudoti bet kokius zodzius ir ziureti ar modelis sugebejo generalizuoti kazka idomaus

gal reikia paiimti populiariu zodziu is ivairiu laikotarpiu
  - galima paziureti koki procenta paskutiniu 50 metu reikia paiimti kad ieitu idomus zodziai is sio laikotarpio, ir toki pacia dali paiimti nuo kiekvieno penkiasdesimtmecio iki 1800.
    - galima zengti po 25 metus
    - galbut butu idomu atimti is modelio darymo populiariausius ~1000 zodziu?

18-05-04

parquet pasirodo greitesnis ir kompaktiskesnis formatas uz CSV
  - parquet ir csv yra column-centric ir row-centric duomenu laikymo sistemos ta tvarka. stulpelinis laikymas yra geriau analitiniams panaudojimams.
    - kam geriau csv?
  - parquet, priesingai negu csv, yra binary formatas. todel yra kompaktiskesnis, lengviau suspaudziamas ir greiciau skaitomas.

nesuspaustas datasetas parquet formatu uzema 1.44gb.
  - jame daug nenaudingu zodziu, filtravimas buvo per daug konservatyvus.
    - taip galima butu empiriskai rasti gera `year_fraction` riba kai zodziai pasidaro naudingi:
      df = df.set_index('year_fraction');
      x = hipotetine riba;
      df[df['year_fraction'] > x].head(50)
        - tada reiktu dar karta prafiltruoti pagal per kiek skirtingu metu zodis rastas.
          - kad rasti gera riba tenai galima naudoti ta pacia technika.

18-05-16

galima pakeisti fastparquet kita biblioteka? fastparquet neveikia ant arm'o.
  - pyarrow irgi nesusikompiliuoja.
  - su x86 kompu perpakuoti is parquet i kita binary formata kurio bibliotekos veiktu ant mano arm'o.

18-06-04

kaip vizualizuoti ng?
  - tai yra isdestyti neuronus pagal ju panasuma dviejose ar trijose dimensijose
    - galima isivaizduoti bruteforce algoritma, bet skamba brangiai

siaip gerai kad ng, palyginti su som, atskiria neuronu treniravima ir lattice'a.
  - pirmiausia istreniruoja, tada sudelioji ant tinklelio.

google visualizing neural gas
  - randu tik
    - Estevez 2006 - Online data visualization using the neural gas network
      - izangoje uzsimina "klasikinius" metodus som vizualizacijai.
        - galbut galima googlinti "neural gas [metodas]"
    - ziurint i kas refina Estevez 2006 straipsni
      - Estevez 2007 - Sleep spindle detection by using Merge Neural Gas
        - naudoja MNG ir OVING is jo ankstesnio straipsnio

kitas klausimas, kaip palyginti kreives?
  - galbut tiesiog mean-squared-error ar mean-absolute-error?
    - vargu ar kanors ismastysiu neisbandes
    - lengva isbandyti

todo:
  - paiimti maza skaiciu daugiausiai naudojamu zodziu (kelis tukstancius)
    - atskirti i csv
  - implementuoti ngram yearly duomenu interpoliavima

interpoliavimo prototipas:
  pd.Series([1,2,3],index=[1788,1799,1803])
    .reindex(np.arange(1786,1806))
    .interpolate(method='index',limit_direction='both') 

18-06-05

todo:
  - implementuoti oving tinkla
    - ganetinai suprantamai apibudintas Estevez 2006 straipsnyje
      - skaitant pradeti nuo 2.3

18-06-14

ar si funkcija veikia normaliai?
  - sklearn.metrics.mean_squared_error([x],[a,b,c])

kodel straipsnyje eq. (3) nenaudoja d arba D?

skaiciuojant output space, yra lyginami atstumai input ir output erdvese.
  - kas jeigu jie nesunormalizuoti? ar mokymas tam atsparus?

18-06-16

kaip sekti mokyma?
  - galima daryti kaip matlabo neural kit'as daro. tai yra:
    - kas kelis zingsnius vizualizuoti tinkla
    - paraleleje rodyti zingsniu skaiciavima
      - taip zinosi ties kelintu zingsniu tinklas stabilizuojasi
    - galbut tureti buda sklandziai nutraukti (sutrumpinti) mokyma
  - vizualizuoti hyperparametru itaka
    - tai ne prioritetas
    - galima kaip nors bandyti vizuolizuoti neighborhood'o skersmeni
      - kazka panasaus padaryti su learning rate'u
        - galbut tai galima padaryti kaip heatmap overlay

18-06-20

deja bokeh nepalaiko idomios interakcijos (kaip HoloMap) be serverio
  - net su serveriu, procesas atrodo komplikuotas
  - reikia kurti savo bokeh app'a ir neaisku kaip jam maitinti duomenis is ipython.

18-06-23

sprendimas bokeh vizualizacijai padaryti grida su ~8iom treniravimo stadijom.
  - _galbut_ nera toks patogus kaip interaktyvus valdymas, taciau lengva padaryti.

kaip sudelioti taskus ant tinklo?
  - galima iskelti is pagrindines funkcijos proceduras kurios duos labiausiai suaktyvintus neuronus
    - parasiau funkcija 'fire'

18-06-24

xTODO pastebejau kad output_deviations gali buti 0, 
  - skaiciuojant delta_z yra dalinama is output_deviations
    - ir rezultatas tada gali buti -Inf.

vizualizacijai isspresti dvi problemas:
  - padaryti kad asys butu normalios savaime
    - dabar ju isviso nera. atsiranda jeigu hardcoduoji ju range'us rankiniu budu
  - sulinkinti grido asis, kad butu patogu ziureti
    - skaityti straipsnio
      - https://bokeh.pydata.org/en/latest/docs/user_guide/interaction/linking.html
    - reikia visiems Figure objektams duoti tas pacias asis
      - tai galima padaryti arba paduodant asis i to_figure
      - arba mapinant per Figure objektus visualise metode
        - fig.xrange = ...

bokeh kartais sukvailioja ir reikia istrinti busena
  - from bokeh.plotting import reset_output

pythono debuggeris kartais pravercia
  - import pdb; pdb.set_trace()
  - pdf.pm() # postmortem, analizuoja paskutine panika

ipython auto reloadinimas:
%load_ext autoreload
%aimport antra_versija.oving
%autoreload 1

18-06-25

kodel tinklas auga eksponentiskai?
  - pirmuosiuose 6/8 zingsniu jis atrodo mazas, tada staiga labai didelis
    - nepriklausomai nuo zingsniu skaiciaus
      - taciau kiek didelis jis pasidaro matuojant absoliuciai proporcinga zingsniu skaiciui

kokia edge'u paskirtis?
  - rodos tik vizualizacija, taciau galbut juos galima panaudoti?

neakivaizdu kad mokymasis vyktu
  - gal reiktu vizualizuoti ws o ne zs?
    - cia ne som'as, tai negaliu. ws koordinates ir yra zs
  - pasirodo buvo blogai sureguliuoti parametrai

algoritmas veikia
  - taciau
    - labai jautrus parametram
      - ir parametru daug

ka ismokau eksperimentuodamas
  - su 2d apskritimu
    - dabartiniai nustatymai
        input_neighborhood_width = Range(start=1.5, end=0.1),
        output_neighborhood_width = Range(start=30, end=10),
        learning_rate = Range(start=0.8, end=0.1),
        lifetime = Range(start=50, end=50),
        ~10 neuronu
        ~150 tmax
    - input_neighborhood_width (inw) ir output_neighborhood_width (onw) turi skirtingas skales -- onw gali buti desimtis kartu didesnis
    - inw ir onw santykis tarp 0 ir f taip pat gali skirtis. inw f/0 santykis 15 kartu didesnis
    - lifetime biski dzin ir gali buti pastovus
    - jeigu learning rate per didelis ratas vaziuoja pastovia kryptimi mokymo eigoje
    - jeigu nw nustatymai per dideli, ratas nesusidaro arba buna trapus.
    - jeigu nw nustatymai per mazi, ratas taip pat nesusidaro
    - ! padidinus neuronu skaiciu is 10 i 100-150, seni nustatymai pasidaro visiskai neadekvatus
      - konkreciau, nw nustatymai pasidaro per mazi
        - kolkas atrodo kad nw nustatymus reikia padauginti is (150 / 10)^2
      - hipoteze
        - nw nustatymai itakoja skaiciavimus susijusius su rank'u, o ne input ar output erdvese.
          - taigi jeigu pasikeicia neuronu skaicius, isvedamas neighborhood'o plotis nepasikeicia, bet ziurint i neighborhood'o width'a santykiu i tinklo dydi (neuronu skaiciu), nw traukiasi.

ar galima padaryti nw skaiciavimus jautrius neuronu skaiciui?
  - efektyvus nw, tai yra neuronu_skaicius/nw, ir taip priklauso nuo neuronu skaiciaus.
  - yra skirtumas tarp nw, kuris yra reguliuojamas per parametrus ir efektyvaus nw. skirtumas kad efektyvus nw priklauso nuo neuronu skaiciaus.
  - taip galima.
    - veikia. nw nustatymai pasidaro atsparus neuronu skaiciaus pasikeitimams

lifetime taip pat galima susieti su tmax

bokeh html'us serviruoju su 
  python3 -m http.server 8080

18-06-27

idejos:
  - dabar parametru kaita mokymo eigoje yra pastovi ir neprisitaikanti
    - prisitaikantys parametrai butu daug geriau
  - pradinei tinklo busenai galima naudoti istreniruota tinkla
    - galima is pradziu ismokyti dideli tinkla
      - tada ji samplinant padaryti pradine busena mazesniems tinklams
    - tai susiaurintu spektra kiek neuronai turi judeti mokymo eigoje 

18-06-28

istirti ar galima "asinchronizuoti" tinklo mokyma
  - ar galima input ir output erdves mokyti atskirai, ne tuo paciu metu
    - jei taip
      - galima butu sujungti batch ir sekvencinius (hebbian?) mokymo budus
          - batch input erdvei
          - adaptyviai output erdvei
      - ismokius input erdve, ja galima butu pernaudoti output mokymuose taip sumazinant komputacijos kieki pasikartojanciuose mokymuose
  - scholar batch neural gas
    - apie batch ng daugiausia raso B. Hammer 2005-2007 metais
      - nueisiu i jos google scholar saita paziureti tikslia chronologine straipsniu tvarka
      - skaitysiu paskutini(-ius)
      - pasirodo Hammer vardas uzdetas ant labai daug straipsniu
        - bet yra dar vienas vardas kuris jungia straipsnius kurie man idomus
          - A Hasenfuss
    - kas yra magnification control neural gas mokyme?
      - galbut tai prisitaikantis nw reguliavimas apie kuri galvojau?
    - 2014 massively parallel batch neural gas for boundary hierarchy construction
      - r weller, d mainzer, et al
      - idomu
        - kas yra boundary hierarchy construction?
          - tai metodas ieskoti susikirtimu tarp objektu 3d erdveje
            - pvz zaidimuose
        - koki batch neural gas algoritma nusprende naudoti?
          - bng su magnification control, parase gpu implementacija
    - 2012 online semi-supervised growing neural gas
      - o beyer, p cimiano
      - idomu kokie ju argumentai naudoti online mokyma
        - sis tinklas naudojamas klasifikacijai
        - online leidzia stebeti mokyma tiesiog
    - 2008 growing neural gas for temporal clustering
      - ij sledge, jm keller
      - gali buti idomu palyginti su mng
    - kaip skaityti siuos straipsnius?
      - tvarka
        - pradeti nuo hammer tekstu
          - nes prie ju as priprates
          - jie logine progresija tam apie ka masciau
        - tada pereiti prie situ naujai rastu autoriu
    - ka perskaiciau:
      - 2006, Batch and Median Neural Gas
        - A Hasenfuss
        - pasiulytas batch ng rodo panasu tiksluma i paprasto ng
        - batch ng daug greitesnis
        - pasiule median ng
          - median ng naudoja ne vidurkius, o median'us
            - todel tinka naudojimui su "non-vectorial" data
              - pvz discreet data
        - uzsiminta apie ng vizualizacija
          - ref [4] "fast standard methods for the reduced set of prototypes such as multidimensional scaling"
            - mds
              - tai technika kuri zinant atstumus tarp tasku stengiasi juos isdelioti n dimensijose (paprastai dviejose)
                - sklearn turi implementacija ir pavyzdziu
        - uzsimina apie learning metric
          - ref [15,17]
            - [17] negalejau rasti
            - [15]
              - 2003, supervised neural gas with general similarity measure
                - sujungia ng su lvq
                  - pasirode komplikuotas
                - tas "similarity measure"
                  - is straipsnio neaisku
                  - is google, tai tas pats kas distance
                  - kitaip sakant tai nera kazkas ka galiu tiesiogiai naudoti stebint mokyma
        - kaip nustatyti kada bng convergina?
      - 2006, supervised batch neural gas
        - hasefuss, villmann, hammer
        - batch neural gas klasifikacijai
        - relevance learning
          - yra trumpas apibudinimas, bet nesuprantu
          - ref [7]
      - 2007, Magnification control for batch neural gas
        - hasefuss, villmann, hammer
        - kas yra magnification?
          - information magnification one
            - tai yra kai kiekvienas prototipas atstovauja po vienodai duomenu
              - taip informacijos kiekis prarastas pakeiciant duomenis prototipais yra minimalizuojamas
          - inf magn kuris yra ne vienas pabrezia arba ignoruoja retus reiskinius
            - magn > 1: ignoruoja retus atvejus
            - magn < 1: pabrezia retus atvejus
        - budai padidinti magnification
          - local learning
            - learning rate adjusted according to local data density
          - convex/concave learning
            - kai neighborhoodo itaka turi tokias formas
        - idomu, bet ne prioritetas
      - 2007, Relational Neural Gas
        - hasefuss, hammer
        - Median Neural Gas pagerinimas
- neatsakiau i klausima: ar galiu mokyti oving tinklo input ir output sluoksnius atskirai
  - galbut to net nereikia
    - oving galima pakeisti paprastu ng (arba bng) ir mds offline vizualizacijai
      - kaip pasilygina mds ir oving vizualizavimas?
        - kad palyginti
          - perleisti oving tinkla per mds
            - issiaiskinti kokioje formoje turi buti duomenys sklearn mds'ui.
              - tiesiog eile tasku, atstumus tarp ju jis paskaiciuoja pats

rasti kaip oving offline versija veikia
  - ji galbut stabilesne, ar maziau zaidimo su parametrais
  - offline butu gerai, nes vienu metu treniruoti input ir output erdves sunku
- mds turetu uztekti
  - mds yra daugiau naudotas, turi lengvai prieinamu implementaciju
    - implementacijos konfiguruojamos lengvai

ieskoti ideju kituose ng algoritmuose, kaip jie susidoroja su hyperparametru optimizacija
  - galbut jie tinklo parametrizacija kazkaip supaprastina
  - galbut jie naudoja kokias nors metrikas kad pritaikyti parametrus prie situacijos
  - paziureti kaip mng tai daro
    - berods jie tiesiogiai reguliuoja santyki tarp demesio neuronui ir kontekstui
    - jie naudoja "entropy" metrika
      - bet neaisku kas ji
        - galbut straipsnio experimentu skiltyje bus aprasyta kaip matuojama "entropy"

rasti kaip galima butu kvantifikuoti tinklo mokymasi, ar mokymosi progresa
  - tai galima butu naudoti analizuojant mokymuose ir kuriant metrikas automatiniam parametru reguliavimui
    - idejos:
      - neuronu dalis kuri yra aktyvi
        - intuicija tokia kad kai blogai sureguliuotas mokymas didele dalis skaidriu nesikeicia
          - nw parametrai arba lr buna per mazi
        - kaip apibrezti aktyvuma
          - rasti klusterio centra ir paskaiciuoti kiekvieno tasko nuotoli
            - kartoti mokymo eigoje ir isvesti moving average is nuotoliu kitimo vidurkio
              - ar galima kazka geresnio uz vidurki panaudoti?
          - o gal nereikia centro
            - galima tiesiog lyginti su senu tinklu, ir registruoti kitima
        - padarant parametru kaita adaptyvia
          - taikyti lr ir/ar nw?
          - kaip zinoti kada tinklas stabilizuojasi?
          - kaip zinoti kada didinti ar mazinti?

ar galima isreiksti nw santykiu i tinklo dydi?
  - taip galima butu supaprastinti mokymo reguliavima

vizualizuoti nw (neighborhood width)
  - tai pades analizuoti mokymasi

18-07-04

bng implementacija
  - ar galima paralelizuoti ws.map(f)?
    - manau taip
    - kaip?
      - gal reikia ziureti kaip uzduotis paraleleje daro pvz sklearn mds implementacija?

ko nesuprantu bng algoritme?
  - ieskoti atsakymo straipsniuose kurie cituoja bng
  - rodos man reikejo naudoti dot product kai naudojau * (cross product?)
    - dabar esu per daug pavarges, neaisku kaip performuoti veiksmus
  - sutvarkyta
    - neaisku kame buvo problema, negaliu paaiskinti kodel susitvarke
    - pradejo veikti kai performavau kad, vietoje map(f,ws), skaiciavimai su ws vyktu vektorizuotai kaip ir su xs

18-07-06

bng algortimas veikia greitai

eksperimentai
  - ant circle_data ir s_curve veikia gerai
  - ant swiss_roll dataseto veikia sunkiai
    - reikia didelio t_max, daug data pointu ir daug neuronu
      - swiss_roll turi vietas kurios tarsi purskia, sklaido taskus. ten taskai reti
        - mazinant neuronu skaiciu tas purskimas padaro kad sukurys pavirstu i vientisa debesi
    - isbandyti
      - keisti learning_rate
        - panasu kad learning_rate_min = 0 yra idealus
      - sumazinti dar neuronu skaiciu, gal tada purskiancios/retos vietos gaus maziau neuronu nei tankus vidiniai krastai?
        - nepadeda
      - implementuoti magnification control
        - jis leidzia keisti kiek demesio skiriama krastutiniams atvejams
      - exponentine nw funkcija
        - padejo, dabar tinklas greiciau konverdzina

poverty mdi turi didele korelacija tarp visu dimensiju
  - del to vizualizacija nera pati idomiausia
  - ar tokiu atveju dimensiju mazinimas ng ir/ar mds pagalba naudingas?

18-07-07

magnification control gali buti labai didelis arba mazas
  - man tai nenaudinga
  - kaip padaryti kad jis butu [-1;+1] range'e?
    - reikia pirmiausia zinoti kokios jis formos
      - pd.Series(mc).describe()
    - mc / mc.max()

magnification control veikia
  - matosi kai vizualizuoji prototipu tanki
    - pvz su hex tailais
  - information transfer rate = 1 padaro kad atrodytu kaip grynas mds
  - mazesnis maziau pabrezia tankias vietas ir daugiau pabrezia retas vietas
  - didesnis atvirksciai

panasu kad jau galima eksperimentuoti

issukiai ir klausimai
  - bng zemelapiai atrodo netvarkingesni negu oving
    - galbut taip yra del to kad oving nupiesia edge'us?
  - pritaikyti entropy tipo metrika kad protingiau reguliuoti mokyma
    - pries automatizuota reguliavima reikia paprasciausiai vizualizuoti sias galimas metrikas
  - rasti idomesniu dataset'u negu poverty mdi
    - isbandyti mano "zodziu kreives"
  - perskaityti uzrasus is anksciau kuriuos persokau

18-07-11

google books 1ngram dataseto apdirbimas
  - reikejo panaikti nan'us
    - neaisku kaip jie atsirado
    - tai reiskia kad 'processed' csv failai gali buti nenaudojami ir juos reikia perdaryti
  - del duomenu trukumo pries 1800, selectinu informacija tik nuo 1808
    - kazkodel gavosi 201 metai, nors 2008 - 1808 turetu buti 200
  - df.count(): 5476805 / 201 = 27247.78
    - po siu pakeitimu liko apie 27k zodziu
  - df.query('ngram in @x_most_frequent',inplace=True)
    - prafiltruosiu iki top 25k zodziu
      - df.count(): 4639772
  - zinant kad cia turbut 25000 zodziu galima paskaiciuoti po kiek metu yra
    - 4639772 / 25000 = 185.59
      - 185.59 / 201 = 0.923
        - reiskia 7.7% informacijos tures buti interpoliuojama
  - main.process_data(df) turi defekta
    - grazintam df'e buna NaN year_fraction'u
      - .dropna().groupby('ngram').size() grazina vienodus dydzius tai reikia suprasti kad dropna sutvarko problema

eksperimentai su 10k kreiviu
  - t_max=20,neuron_count=50,information_transfer_rate=1 file_name='viz_ngram_big'
    - elapsed 357.0s
      mds stress 223.27900
      elapsed 0.0s
      elapsed 2.7s
  - t_max=20,neuron_count=150,information_transfer_rate=1 file_name='viz_ngram_big2'
    - elapsed 481.8s
      - 481 / 20 = 24.05s per step
      mds stress 2709.34279
      elapsed 0.0s
      elapsed 6.4s
  - t_max=20,neuron_count=150,information_transfer_rate=0.5 file_name='viz_ngram_big_itr05'
    - elapsed 483.6s
      mds stress 4143.23490
      elapsed 0.0s
      elapsed 6.6s
  - information_transfer_rate=0.1
    - mds stress 5598.75
    - kolkas geriausas
  - information_transfer_rate=0.01
    - mds stress 6029
    - atsirando artifaktai kai labai reti taskai reprezentuojami dvieju neuronu
  - information_transfer_rate=0.05 t_max=40
    - elapsed 670s
      - 670 / 40 = 16.75s per step
      mds stress 6213
  - information_transfer_rate=0.1 t_max=40
    - elapsed 667s
      mds stress 5771
    - sitas atrodo geriausias
      - itr 0.1 isgauna gera demesio pasiskirstyma ir t40 isryskina bruozus

eksperimentai su 15k kreiviu
  - elapsed 1410s
    1410 / 40 = 35.25s per step
    mds stress 5567
  - dabar kai galima vizualizuoti prototipus,
    - atrodo kad klusteriai neoptimalus, panasios kreives buna biski atitolusios
      - pabandysiu padidinti itr
      - ir prie to sumazinsiu neuronu kieki, galbut ju biski per daug
  - itr=0.5 t_max=30 neuron_count=100
    - elapsed 1038s
      mds stress 1606
        - gerokai mazesnis negu ankstesni
    - galbut 100 neuronu dar vis per daug

TODO tokios tankios laiko informacijos nereikia
  - galima butu sumazinti tasku tanki maziausiai dvigubai
  - to reikia kad butu lengviau eksperimentuoti su nustatymais, ypatingai itr
  - kaip sumazinti kreives tasku tanki prarandant kuo maziau informacijos?
    - tai vadinasi downsampling
    - pd.Series.resample
      - reikia specialaus indexo?
    - pd.Series.reindex
      - galbut lankstesnis metodas, nebutinai reikalaujantis laikinio indekso

TODO kaip geriau lyginti kreives?
  - kadangi man rupi kreiviu forma, galeciau paskaiciuoti kreives kampa ties kiekvienu tasku
    - kreives kampas
      - differential?
    - tada lyginant kreives, kreives kurios juda taip pat bet yra nutolusios nebus baudziamos
    - tinka euclidian distance

realizacija: galima naudoti kanors kita vietoje MDS, mds tik vienas is variantu
  - t-sne idomus variantas, taciau jis letas

18-07-14

taip pat idomu koks input space tasku tankis krenta kiekvienam neuronui
  - taip pat pasverus ju daznuma
    - perziurint kokie zodziai krenta kokiam taskui taip pat idomu zinoti kiek tie zodziai buvo naudoti, kokia ju vieta "tope"
  - tai galima vizualizuoti per ratu spalva
  - arba ijungiamus glifus

18-07-16

sumazinus kreiviu tasku tanki iki kas trecio
  - csv dydis sumazejo iki 51mb
    - tai yra su top25k zodziu
    - su top15 uzeme 93mb
      - reiskia gaunu 2/5 daugiau informacijos bet ji uzema 4/9 maziau

eksperimentai su trigubai retesnem kreivem (every3rd) top20
  - top 25 yra per daug, neimanoma atlikti pdist skaiciavimu net su 10 neuronu
  - t_max=30,neuron_count=50,information_transfer_rate=0.5
    - elapsed 708.1s
      mds stress 41

pakeitus kreives kampu sekomis
  - neaiski zemelapio interpretacija
    - seni vizualizavimo irankiai turi buti pakeisti
      - nes nesimato kreives
        - kadangi prototipai dabar yra kampai o ne kreive
          - nebegali ju tiesiogiai naudoti vizualizacijai
      - alternatyvos
        - isvardinti zodzius 
          - kad ant ju galima butu paspausti
          - kad juos galima butu zymeti spalvomis
            - tai leistu lyginti pvz ju populiaruma
        - paspaudus ant neurono parodyti atsitiktinio zodzio, kuris priskiriamas jam, kreive

noretusi viska padaryti su holoviews ir html-only
  - nepanasu kad imanoma
  - holoviews idomesnem interakcijom naudoja serveri
    - galbut yra budas naudoti javascripta ir html-only panasiai kaip su bokeh?
  - gali tekti toliau naudoti bokeh

18-07-18

vizualizacijos perdarymas
  - reikia vizualizuoti
    - neuronu issidestyma
      - tam reikia prototipu (neuronu)
    - kur kokie zodziai
      - tam reikia (ngram, angles[]) poru
    - kiek zodziai populiarus
      - reikia (ngram, popularity) poru
    - koks vidutinis neurono zodziu populiarumas
    - kokia dalis testavimo duomenu krenta kiekvienam neuronui
  - duomenis testavimui galima apibendrinti taip
    - neuronai
    - {ngram, kreive, popularity} objektai
      - prie to galima prideti ir angles informacija
        - dabar neakivaizdu kad tai svarbu, bet ateityje gali reiketi
          - tai {ngram, kreive, popularity, angles} objektai

kaip tai performuoti i cds'us kad bokeh suprastu
  - tai priklauso nuo to koki tasku zymejima reikia kad bokeh suprastu
    - kaip bus zymimi taskai?
      - pazymejus neurona
        - galima bus pazymeti zodzius
          - tada bus pateikiami tu zodziu atributai line chart'e
  - tam reikes
    - cds'o neuronais
      - stulpeliai: pozicija, vid. populiarumas (0-1), tasku tankis (0-1)
    - cds'u saraso su kiekvieno neurono zodziu lentelemis
      - stulpeliai: ngram, populiarumas, kampu seka, kreive
        - sios eilutes uztenka vizualizuoti viska apie zodi

scikit-learn turi idomiu variantu standartizavimui
  - sklearn.preprocessing.robust_scale pvz
    - padedu su outlieriais
